package com.easylinkin.linkappapi.facerecognition.service.oss;

import java.io.InputStream;
import com.easylinkin.linkappapi.facerecognition.dto.OSSPolicy;

public interface ObjectStorageService {

    /**
     * 创建指定名字的bucket
     * */
    void createBucket(String bucketName);

    /**
     * 检查指定的bucket名字是否已存在
     *
     * 若该bucket已存在，则返回 true。否则，返回 false
     * */
    boolean checkBucketExist(String bucketName);

    /**
     * 在bucket中创建文件夹
     * */
    void createFolder(String bucketName, String folder);

    /**
     * 检查指定的名字的对象在bucket中是否已存在
     * 对象包含：文件和文件夹
     *
     * 若该bucket已存在，则返回 true。否则，返回 false
     * */
    boolean checkObjectExist(String bucketName, String objectName);

    /**
     * 删除bucket中的文件
     *
     * 其中，objectName 是带路径的文件名
     * */
    void deleteFile(String bucketName, String objectName);

    /**
     * 生成带过期时间的链接地址
     *
     * 其中，objectName 是带路径的文件名
     *      expiry 是失效时间，单位为秒
     * */
    String generatePresignedUrl(String bucketName, String objectName, int expiry);

    /**
     * 上传图片对象到OSS服务器
     *
     * 注意：该接口仅用于上传图片对象
     * */
    void uploadImgObject(String bucketName, String file, InputStream is);

    /**
     * 获取OSS对象的输入流
     * */
    InputStream getObjectInputStream(String bucketName, String objectName);

    /**
    * 拷贝对象
    * */
    void copyObject(String bucketName, String objectName, String destBucketName, String destObjectName);

    /**
     * 上传对象
     * */
    void putObject(String bucketName, String objectName, InputStream in);

    /**
     * 上传对象
     * */
    void putObject(String bucketName, String objectName, InputStream in, String contentType);
    
    /**
     * 返回给前端上传路径与地址
     * 
     * @param dir
     * @return
     */
    OSSPolicy generatePostPolicy(String dir);
}
